package cn.hellotrue;

import java.io.IOException;

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class HelloTrueAX {
//	private static String baseUrl = "http://api.tay8.com/msgcode/api/do.php?";
	private static String baseUrl = "http://api.ixinsms.com/api/do.php?";
	
	private static String name = "vipwangtao888";
	private static String password = "WT985200";
	private static String projectId = "10137";//茅台云商项目id
	private static String projectId_WEB = "10137";//茅台电商项目id
	public static String TOKEN = "";

	public String loginIn(){
		String loginUrl = "action=loginIn&name="+name+"&password="+password;
		return getReslutByURL(loginUrl).getValue();
	}
	public HelloTrueReslut getReslutByURL (String url){
		HelloTrueReslut reslut = new HelloTrueReslut();
		HttpGet httpGet = new HttpGet(baseUrl+url);
		CloseableHttpClient httpClient = null;  
        CloseableHttpResponse response = null;  
        HttpEntity entity = null;  
        String responseContent = null;  
        try {  
            // 创建默认的httpClient实例.  
            httpClient = HttpClients.createDefault();  
            // 执行请求  
            response = httpClient.execute(httpGet);  
            entity = response.getEntity();  
            responseContent = EntityUtils.toString(entity, "UTF-8");  
            System.out.println(responseContent);
            if(responseContent!=null&&!"".equals(responseContent)){
           
            	reslut.setKey(responseContent.substring(0,1));
            	reslut.setValue(responseContent.substring(2,responseContent.length()));
            }
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                // 关闭连接,释放资源  
                if (response != null) {  
                    response.close();  
                }  
                if (httpClient != null) {  
                    httpClient.close();  
                }  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
          
		return reslut;
	}
	
	public String getPhone(String token){
		/*
		 *  指定区域调用参数：sid=项目id&token=登录时返回的令牌&locationMatching=include|exclude&locationLevel=p|c&location=重庆
			同时取两个以上的码，项目id之间用逗号(,)隔开，如sid=1000,1001。如果要获取指定号码，再在后面加一个phone=要指定获取的号码
			locationMatching、locationLevel、location三个为可选参数。用来取某些区域的手机号或者不要某些区域的手机号
			locationMatching的参数值只能是include或者exclude中的一个。include指的是包含区域，exclude指的是不包含区域
			locationLevel参数只能是p或者c中的一个。p指的是省（province），c指的是市（city）
			location指的是区域，中文值。可以在取验证码中查询到具体中文内容。需要utf8编码一下
		 */
		//http://api.hellotrue.com/api/do.php?action=getPhone&sid=项目id&token=登录时返回的令牌
		String getPhoneUrl = "action=getPhone&sid="+projectId+"&token="+token+"&vno=0";
		String tel_phone = getReslutByURL(getPhoneUrl).getValue();
		while(tel_phone.contains("没有")){
			System.out.println(tel_phone);
			try {
				addBlacklist(token,tel_phone);
				Thread.sleep(3000);
			} catch (InterruptedException e) {
			}
			tel_phone = getReslutByURL(getPhoneUrl).getValue();
		}
		return tel_phone;
	}
	
	public String getPhone(String token,String telphone){
		/*
		 *  指定区域调用参数：sid=项目id&token=登录时返回的令牌&locationMatching=include|exclude&locationLevel=p|c&location=重庆
			同时取两个以上的码，项目id之间用逗号(,)隔开，如sid=1000,1001。如果要获取指定号码，再在后面加一个phone=要指定获取的号码
			locationMatching、locationLevel、location三个为可选参数。用来取某些区域的手机号或者不要某些区域的手机号
			locationMatching的参数值只能是include或者exclude中的一个。include指的是包含区域，exclude指的是不包含区域
			locationLevel参数只能是p或者c中的一个。p指的是省（province），c指的是市（city）
			location指的是区域，中文值。可以在取验证码中查询到具体中文内容。需要utf8编码一下
		 */
		//http://api.hellotrue.com/api/do.php?action=getPhone&sid=项目id&token=登录时返回的令牌
		String getPhoneUrl = "action=getPhone&sid="+projectId+"&phone="+telphone+"&token="+token;
		String tel_phone = getReslutByURL(getPhoneUrl).getValue();
		while("目前没有可用号码".equals(tel_phone)){
			System.out.println(tel_phone);
			try {
				addBlacklist(token,tel_phone);
				Thread.sleep(3000);
			} catch (InterruptedException e) {
			}
			tel_phone = getReslutByURL(getPhoneUrl).getValue();
		}
		return tel_phone;
	}
	public String getPhone_WEB(String token){
		/*
		 *  指定区域调用参数：sid=项目id&token=登录时返回的令牌&locationMatching=include|exclude&locationLevel=p|c&location=重庆
			同时取两个以上的码，项目id之间用逗号(,)隔开，如sid=1000,1001。如果要获取指定号码，再在后面加一个phone=要指定获取的号码
			locationMatching、locationLevel、location三个为可选参数。用来取某些区域的手机号或者不要某些区域的手机号
			locationMatching的参数值只能是include或者exclude中的一个。include指的是包含区域，exclude指的是不包含区域
			locationLevel参数只能是p或者c中的一个。p指的是省（province），c指的是市（city）
			location指的是区域，中文值。可以在取验证码中查询到具体中文内容。需要utf8编码一下
		 */
		//http://api.hellotrue.com/api/do.php?action=getPhone&sid=项目id&token=登录时返回的令牌
		String getPhoneUrl = "action=getPhone&sid="+projectId_WEB+"&token="+token;
		String tel_phone = getReslutByURL(getPhoneUrl).getValue();
		while("目前没有可用号码".equals(tel_phone)){
			System.out.println(tel_phone);
			try {
				addBlacklist(token,tel_phone);
				Thread.sleep(3000);
			} catch (InterruptedException e) {
			}
			tel_phone = getReslutByURL(getPhoneUrl).getValue();
		}
		return tel_phone;
	}
	public String getPhone_WEB(String token,String telphone){
		/*
		 *  指定区域调用参数：sid=项目id&token=登录时返回的令牌&locationMatching=include|exclude&locationLevel=p|c&location=重庆
			同时取两个以上的码，项目id之间用逗号(,)隔开，如sid=1000,1001。如果要获取指定号码，再在后面加一个phone=要指定获取的号码
			locationMatching、locationLevel、location三个为可选参数。用来取某些区域的手机号或者不要某些区域的手机号
			locationMatching的参数值只能是include或者exclude中的一个。include指的是包含区域，exclude指的是不包含区域
			locationLevel参数只能是p或者c中的一个。p指的是省（province），c指的是市（city）
			location指的是区域，中文值。可以在取验证码中查询到具体中文内容。需要utf8编码一下
		 */
		//http://api.hellotrue.com/api/do.php?action=getPhone&sid=项目id&token=登录时返回的令牌
		String getPhoneUrl = "action=getPhone&sid="+projectId_WEB+"&phone="+telphone+"&token="+token;
		String tel_phone = getReslutByURL(getPhoneUrl).getValue();
		while("目前没有可用号码".equals(tel_phone)){
			System.out.println(tel_phone);
			try {
				addBlacklist(token,tel_phone);
				Thread.sleep(3000);
			} catch (InterruptedException e) {
			}
			tel_phone = getReslutByURL(getPhoneUrl).getValue();
		}
		return tel_phone;
	}
	public String getMessage_WEB(String token,String telphone){
		String yanzhenma = "";
		try {
			Thread.sleep(3500);
		} catch (InterruptedException e1) {
		}
		for(int i=0;i<20;i++){
			String getMessageUrl = "action=getMessage&sid="+projectId_WEB+"&phone="+telphone+"&token="+token;
			yanzhenma = getReslutByURL(getMessageUrl).getValue();
			if("".equals(yanzhenma)||yanzhenma.contains("还没")){
				try {
					yanzhenma = "超时";
					Thread.sleep(3000);
				} catch (InterruptedException e) {
				}
			}else{
				break;
			}
		}
		if(yanzhenma.contains("超时")){
			//加入黑名单，防止下一次再获取到
			addBlacklist_WEB(token,telphone);
		}
		return yanzhenma;
	}
	
	public String getMessage(String token,String telphone){
		String yanzhenma = "";
		try {
			Thread.sleep(3500);
		} catch (InterruptedException e1) {
		}
		for(int i=0;i<20;i++){
			String getMessageUrl = "action=getMessage&sid="+projectId+"&phone="+telphone+"&token="+token;
			yanzhenma = getReslutByURL(getMessageUrl).getValue();
			if("".equals(yanzhenma)||yanzhenma.contains("还没")){
				try {
					yanzhenma = "超时";
					Thread.sleep(3000);
				} catch (InterruptedException e) {
				}
			}else{
				break;
			}
		}
		if(yanzhenma.contains("超时")){
			//加入黑名单，防止下一次再获取到
			addBlacklist(token,telphone);
		}
		return yanzhenma;
	}
	public boolean addBlacklist(String token,String telphone){
		boolean isBlack = false;
		String getMessageUrl = "action=addBlacklist&sid="+projectId+"&phone="+telphone+"&token="+token;
		String result = getReslutByURL(getMessageUrl).getValue();
//		isBlack = cancelRecv(token,telphone);
		if("操作成功".equals(result)){
			isBlack = true;
		}
		return isBlack;
	}
	
	public boolean addBlacklist_WEB(String token,String telphone){
		boolean isBlack = false;
		String getMessageUrl = "action=cancelRecv&sid="+projectId_WEB+"&phone="+telphone+"&token="+token;
		String result = getReslutByURL(getMessageUrl).getValue();
		if("操作成功".equals(result)){
			isBlack = true;
		}
		return isBlack;
	}
	public boolean cancelRecv(String token,String telphone){
		boolean isBlack = false;
		String getMessageUrl = "action=cancelRecv&sid="+projectId+"&phone="+telphone+"&token="+token;
		String result = getReslutByURL(getMessageUrl).getValue();
		if("操作成功".equals(result)){
			isBlack = true;
		}
		return isBlack;
	}
	public static void main(String[] args){
		HelloTrueAX ht = new HelloTrueAX();
		String token = HelloTrueAX.TOKEN;
		String telphone = ht.getPhone_WEB(token);
		String telCode2 = ht.getMessage_WEB(token, telphone);
		System.out.println("获取到的验证码信息为：" + telCode2);
	}
}
